iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
DevOps

從開源雲到邊緣運算系列 第 22

[Day 22]K3s 部署 - Affinity 功能校驗 - Node 篇

  • 分享至 

  • xImage
  •  

在前幾篇之中,我們簡介了k3s + Deployment的相關方案,相信各位應該都有練習了(測試有問題跟我們說啊!),在Pod派送之中,我們前幾天都只對後端服務進行存取與副本機制的取用,而如何設定該Pod所需要的硬體資源,並為Pod設計指定的派送節點,在kubernetes之中有提及,其使用Node Selector、Node Affinity(Hard/Soft)等方案,而在k3s之中,印為他的架構followkubernetes之上,所以我們也同樣來進行一下測()試(),並測試Node label節點標註功能是否可以運行在k3s之上,了解一下載節點選擇的方案之上,k3skubernetes是否養相異之處。


Node Selector

Node Selector 方案為直接選擇 Node Label的功能(暴力解法),直接尋找叢集內部的所有節點,查詢是否出現所需要的節點標籤,這邊會先教學一下如何建立節點標籤,並嘗試使用Node Selector方案協助Pod派送到指定的節點之上。

可用節點確認

  • 功能指令
k3s kubectl get node -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071rEcNYnre5j.png

節點標籤設計

  • 功能指令
k3s kubectl label node ${node-name} ${key=value}
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/201210713Usg0TE3tN.png

節點標籤顯示

  • 功能指令
k3s kubectl get node --show-labels
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071pv0oZy9v3X.png

派送成功案例

  • 節點標籤存在,測試是否能夠中介Pod派送

描述檔案設計

  • 服務描述檔案內容
apiVersion: v1
kind: Pod
metadata:
  name: nginx-node-selector
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
  nodeSelector:
    network: 100m
  • 執行結果 (示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071iUu12yMEpd.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071CzKvggNyYe.png

服務派送流程分析

  • 執行指令
k3s kubectl describe pod -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071QIJxrUQ4zC.png

派送失敗案例

  • 設計 一個 Pod,且他的相依Node 參考標籤不存在,分析 Node Selector 功能。

描述檔案設計

  • 服務描述檔案內容
apiVersion: v1
kind: Pod
metadata:
  name: nginx-node-selector
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
  nodeSelector:
    network: 1000m
  • 執行結果 (示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/201210716EZ1oSJe5D.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071YVN3aglZWU.png

服務派送流程分析

  • 執行指令
k3s kubectl describe pod -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071ZnCvezofrt.png

Node Affinity

Hard Mode

Hard Mode 以必要性節點為出發,對於特定硬體資源的節點標籤為規劃(如:需要Nvidia的顯卡),當Pod內服務只支援某一特定硬體環境時使用,而當Node無法達成該項條件時則會暫停Pod的派送,以較為強制需求性的硬體資源為標籤參考方案,因此稱為Hard Mode

可用節點確認

  • 功能指令
k3s kubectl get node -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071rEcNYnre5j.png

節點標籤設計

  • 功能指令
k3s kubectl label node ${node-name} ${key=value}
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071KJHhgfF54i.png

節點標籤顯示

  • 功能指令
k3s kubectl get node --show-labels
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071uPv1uIopwF.png

派送成功

描述檔案設計

  • 描述檔案設計內容
apiVersion: v1
kind: Pod
metadata:
  name: grafana-node-hdd
  labels:
    app: grafana
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
  containers:
  - name: grafana
    image: grafana/grafana
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071YUgCuqz5jV.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071xULodIgqYH.png

服務派送流程分析

  • 功能指令
k3s kubectl describe pod
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071aDQisNlPq3.png

派送失敗

  • 設計 一個 Pod,且他的相依Node 參考標籤不存在,分析 Node Affinity Hard Mode 功能,並分析其是否可支援Scheduler中介Pod調度的功能。

描述檔案設計

  • 功能指令
apiVersion: v1
kind: Pod
metadata:
  name: grafana-node-hdd
  labels:
    app: grafana
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - sshd
  containers:
  - name: grafana
    image: grafana/grafana
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071hNMgIcZI73.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071nK47KkDbUG.png

服務派送流程分析

  • 功能指令
k3s kubectl describe pod
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071kYUACzPxPg.png

Soft Mode

Soft Mode 是以參考相關Node Label,通常是以非必要硬體基礎節點標籤為規劃,或是以不影響功能的節點標籤為基準,並以加權(加分)方式進行節點選擇,其不同於Hard Mode直接阻擋派送,而是當節點標籤不存在或是不匹配時,將Pod派送到其他可用的節點之上。

可用節點確認

  • 功能指令
k3s kubectl get node -o wide
  • 執行結果(示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071eOCjMT3W7G.png

節點標籤設計

  • 功能指令
k3s kubectl label node ${node-name} ${key=value}
  • 執行結果 (示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071UG69x6e43L.png

節點標籤顯示

  • 功能指令
k3s kubectl get node --show-labels
  • 執行結果 (示意圖)
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071jA4LomBiHC.png

可匹配對應節點派送

  • 測試在 Pod Label存在時,透過Node Affinity Soft Mode協助k3s對於Node進行權重加權(加分),再中介Scheduler指定需派送的目標節點(Target Node)。

描述檔案設計

  • 描述檔案設計內容
apiVersion: v1
kind: Pod
metadata:
  name: grafana-node-12.04
  labels:
    app: grafana
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: os.version
            operator: In
            values:
            - "12.04"
  containers:
  - name: grafana
    image: grafana/grafana
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071vAIy0feou7.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071dMnoLcYnsJ.png

服務派送流程分析

  • 功能指令
k3s kubectl describe pod
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071cRgJZH94ei.png

可用節點選擇派送

  • 驗證在Soft Mode之下,Pod 找不到 Node Label時,將會選擇一個使用率較低的可用節點,而不是像Hard Mode的狀態設計,直接在 Scheduler上進行派送阻擋。

描述檔案設計

  • 描述檔案設計內容
apiVersion: v1
kind: Pod
metadata:
  name: grafana-node-12.04
  labels:
    app: grafana
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: os.version
            operator: In
            values:
            - "16.04"
  containers:
  - name: grafana
    image: grafana/grafana
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071IxcnhkdsoV.png

服務派送與狀態檢視

  • 派送指令
k3s kubectl create -f ${node-affinity-file}
  • 檢視指令
k3s kubectl get pod -o wide
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/201210712LzzJ0HidR.png

服務派送流程分析

  • 功能指令
k3s kubectl describe pod
  • 執行結果
    https://ithelp.ithome.com.tw/upload/images/20191008/20121071B9TaRWBxqo.png

本篇介紹了Node Affinity的相關功能,下篇我們將介紹Pod Affinity的功能。


上一篇
[Day 21]K3s Rolling Update 與 RollBack 功能校驗
下一篇
[Day 23]K3s 部署 - Affinity 功能校驗 - Pod 篇
系列文
從開源雲到邊緣運算30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言